home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 1.iso / HENSA / MISC / SHELL.ARC / Shell / Sources / c / BarIcon < prev    next >
Text File  |  1994-11-09  |  4KB  |  141 lines

  1. #include "DeskLib:Icon.h"
  2. #include "DeskLib:Event.h"
  3. #include "DeskLib:Sound.h"
  4. #include "DeskLib:WimpSWIs.h"
  5. #include "DeskLib:Menu.h"
  6. #include "DeskLib:Window.h"
  7.  
  8. #include "Shell.BarIcon.h"
  9. #include "Shell.Shell.h"
  10. #include "Shell.SafeAlloc.h"
  11.  
  12. #define menu_INFO 0
  13. #define menu_PAUSE 1
  14. #define menu_CONTINUE 2
  15. #define menu_SPEED 3
  16. #define menu_QUIT 4
  17.  
  18.  
  19. static BOOL Shell_IconbarMenuHandler( event_pollblock *event, void *reference);
  20. static BOOL Shell_IconbarMenuCancelHandler( event_pollblock *event, void *reference);
  21.  
  22.  
  23. static void ClaimHandlers( void *reference)
  24. {
  25. Event_Claim( event_MENU, event_ANY, event_ANY, Shell_IconbarMenuHandler, reference);
  26. Event_Claim( event_USERMESSAGE, event_ANY, event_ANY, Shell_IconbarMenuCancelHandler, reference);
  27. }
  28.  
  29. static void ReleaseHandlers( void *reference)
  30. {
  31. Event_Release( event_MENU, event_ANY, event_ANY, Shell_IconbarMenuHandler, reference);
  32. Event_Release( event_USERMESSAGE, event_ANY, event_ANY, Shell_IconbarMenuCancelHandler, reference);
  33. }
  34.  
  35.  
  36. #define Menu_FirstEntry(menu) ((menu_item *) (((menu_ptr) (menu) + 1)))
  37.  
  38.  
  39. static BOOL Shell_IconbarMenuHandler( event_pollblock *event, void *reference)
  40. {    menu_ptr m = (menu_ptr) reference;
  41.     mouse_block    mouse;
  42.  
  43. Wimp_GetPointerInfo( &mouse);
  44.  
  45. if ( event->data.selection[0] == menu_INFO)    ;    /* Chosen 'Info'.    */
  46.  
  47. if ( event->data.selection[0] == menu_PAUSE)    {
  48.     Shell_paused = TRUE;
  49.     Menu_SetFlags( m, menu_PAUSE, TRUE, TRUE);
  50.     Menu_SetFlags( m, menu_CONTINUE, FALSE, FALSE);
  51.     }
  52.  
  53. if ( event->data.selection[0] == menu_CONTINUE)    {
  54.     Shell_paused = FALSE;
  55.     Menu_SetFlags( m, menu_PAUSE, FALSE, FALSE);
  56.     Menu_SetFlags( m, menu_CONTINUE, TRUE, TRUE);
  57.     }
  58.  
  59. if ( event->data.selection[0] == menu_SPEED && event->data.selection[1]==0)    {
  60.     double    newspeed;
  61.     menu_block    *submenu= Menu_FirstEntry(m)[ menu_SPEED].submenu.menu;
  62.     char        *text    = Menu_FirstEntry(submenu)[ 0].icondata.indirecttext.buffer;
  63.     sscanf( text, "%lf", &newspeed);
  64.     Shell_SetPollInterval( newspeed);
  65.     }
  66.  
  67. if ( event->data.selection[0] == menu_QUIT)    Event_CloseDown();
  68.  
  69.  
  70. if ( mouse.button.data.adjust)    {
  71.     mouse.pos.x = mouse.pos.y = 0;
  72.     Menu_ShowLast(); /*( m, mouse.pos, |*iconbar*| FALSE);*/
  73.     }
  74.  
  75. else    ReleaseHandlers( reference);
  76.  
  77.  
  78. return TRUE;
  79. }
  80.  
  81.  
  82.  
  83.  
  84.  
  85. static BOOL Shell_IconbarMenuCancelHandler( event_pollblock *event, void *reference)
  86. {
  87. if ( event->data.message.header.action == message_MENUSDELETED)    ReleaseHandlers( reference);
  88. return FALSE;
  89. }
  90.  
  91.  
  92.  
  93. static BOOL Shell_IconbarMenuClickHandler( event_pollblock *event, void *reference)
  94. {    menu_ptr m = (menu_ptr) reference;
  95. if ( !event->data.mouse.button.data.menu)    return FALSE;    /* Not Menu button.    */
  96.  
  97. Menu_Show( m, event->data.mouse.pos.x, -1);
  98.  
  99. ClaimHandlers( reference);
  100. return TRUE;
  101. }
  102.  
  103.  
  104.  
  105. icon_handle Shell_AddBarIcon( char *spritename)
  106. {    icon_handle    icon;
  107.     menu_ptr    m;
  108.     window_handle    infobox;
  109.  
  110.  
  111. icon    = Icon_BarIcon( spritename, iconbar_RIGHT);
  112.  
  113. m    = Menu_New( "Shell", "Info|Pause,Continue|Speed|Quit");
  114.  
  115. infobox = Window_Create( "ProgInfo", 0);
  116. if ( infobox)    Menu_AddSubMenu( m, menu_INFO, (menu_ptr) infobox);
  117. else    Menu_SetFlags( m, menu_INFO, FALSE, TRUE);
  118.  
  119. /*
  120. speedbox = Window_Create( "ShellSpeed", 0);
  121. if ( speedbox)    Menus_AddDialogBox( m, menu_SPEED+1, speedbox);
  122. else    Menus_FadeEntry( m, menu_SPEED+1, TRUE);
  123. */
  124.  
  125.     {    menu_ptr subm;
  126.     subm = Menu_New( "Poll (s)", "0.1");
  127.     Menu_MakeWritable( subm, 0, Shell_SafeCalloc( 1, 8), 8, "");
  128.     Menu_AddSubMenu( m, menu_SPEED, subm);
  129.     }
  130.  
  131.  
  132. Menu_SetFlags( m, menu_PAUSE, FALSE, FALSE);
  133. Menu_SetFlags( m, menu_CONTINUE, TRUE, TRUE);
  134.  
  135.  
  136. Event_Claim( event_CLICK, window_ICONBAR, icon, Shell_IconbarMenuClickHandler, (void *) m);
  137.  
  138. return icon;
  139. }
  140.  
  141.